home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -screenplay- / hd_installers / -whdload- / whdload_dev / patcher1.04 / makecomparationtable2 next >
Text File  |  1998-06-22  |  12KB  |  637 lines

  1.  
  2. ;This program compares two files with the same length and makes a table
  3. ;of the differences between them. 
  4. ;Done by Egon.
  5.  
  6.  
  7.     INCDIR    ASM-ONE:INCLUDE2.0/
  8.  
  9.     INCLUDE LIBRARIES/DOS_LIB.I
  10.     INCLUDE    LIBRARIES/DOS.I
  11.     INCLUDE    LIBRARIES/DISKFONT_LIB.I
  12.     INCLUDE EXEC/EXEC_LIB.I
  13.     INCLUDE    EXEC/MEMORY.I
  14.     INCLUDE    GRAPHICS/GRAPHICS_LIB.I
  15.     INCLUDE INTUITION/INTUITION_LIB.I
  16.     INCLUDE INTUITION/INTUITION.I
  17.  
  18.     INCDIR    ASM-ONE:
  19.  
  20.  
  21. SIZETABLE = $2000        ;MAXIMALLY SIZE OF COMPARATIONTABLE (Longwords)
  22.  
  23. HP    ;BRA.S    HP
  24.     BASEREG    DOSBAS,A5
  25.     LEA.L    DOSBAS(PC),A5
  26.     MOVE.L    A0,DATABASE(A5)
  27.     MOVE.L    D0,DATALENGTH(A5)
  28.     MOVE.L    A7,OSSTACK(A5)
  29.     SUBQ.L    #1,A0
  30. .1    ADDQ.L    #1,A0
  31.     CMP.B    #$9,(A0)
  32.     BEQ.S    .1
  33.     CMP.B    #$20,(A0)
  34.     BEQ.S    .1
  35.     CMP.B    #$A,(A0)
  36.     BNE.S    .10
  37.     MOVEQ.L    #20,D0
  38.     RTS
  39.  
  40. .10    CMP.B    #'?',(A0)
  41.     BNE.S    .2
  42.     MOVE.L    (_SYSBASE).W,A6
  43.     LEA.L    DOSNAM(PC),A1
  44.     MOVEQ.L    #0,D0
  45.     JSR    _LVOOpenLibrary(A6)    ;DOS öffnen
  46.     TST.L    D0
  47.     BEQ.W    ERRGENERAL
  48.     MOVE.L    D0,DOSBAS(A5)        ;Zeiger sichern
  49.  
  50.     MOVE.L    DOSBAS(PC),A6
  51.     JSR    _LVOOUTPUT(A6)
  52.     TST.L    D0
  53.     BEQ.W    ERRGENERAL
  54.     MOVE.L    D0,OUTPUTBAS(A5)
  55.  
  56.     LEA.L    HELPSYNTAX(PC),A0
  57.     MOVEQ.L    #0,D3
  58.     MOVE.L    A0,D2
  59. .9    TST.B    (A0)+
  60.     BEQ.S    .8
  61.     ADDQ.L    #1,D3
  62.     BRA.S    .9
  63.  
  64. .8    MOVE.L    OUTPUTBAS(PC),D1
  65.     MOVE.L    DOSBAS(PC),A6
  66.     JSR    _LVOWRITE(A6)
  67.     LEA.L    $0.W,A0
  68.     BRA.W    ENDE
  69.  
  70. .2    LEA.L    LOCK1NAM(PC),A1
  71.     BSR.W    EXAMPARAM
  72.     TST.L    D3
  73.     BNE.S    .3
  74.     MOVEQ.L    #20,D0
  75.     RTS
  76.  
  77. .3    LEA.L    LOCK2NAM(PC),A1
  78.     BSR.W    EXAMPARAM
  79.     TST.L    D3
  80.     BNE.S    .4
  81.     MOVEQ.L    #20,D0
  82.     RTS
  83.  
  84. .4    TST.L    D0
  85.     BNE.S    .6
  86. .5    LEA.L    LOCK3NAM(PC),A1
  87.     BSR.W    EXAMPARAM
  88.     TST.L    D3
  89.     BNE.S    .7
  90. .6    ST    NOTSAVE(A5)
  91. .7
  92.  
  93. MAINPRG    MOVE.L    (_SYSBASE).W,A6
  94.     LEA.L    DOSNAM(PC),A1
  95.     MOVEQ.L    #0,D0
  96.     JSR    _LVOOpenLibrary(A6)    ;DOS öffnen
  97.     TST.L    D0
  98.     BEQ.W    ERRGENERAL
  99.     MOVE.L    D0,DOSBAS(A5)        ;Zeiger sichern
  100.  
  101.     MOVE.L    DOSBAS(PC),A6
  102.     JSR    _LVOOUTPUT(A6)
  103.     TST.L    D0
  104.     BEQ.W    ERRGENERAL
  105.     MOVE.L    D0,OUTPUTBAS(A5)
  106.  
  107.     LEA.L    WRITTEN(PC),A0
  108.     MOVEQ.L    #0,D3
  109.     MOVE.L    A0,D2
  110. .3    TST.B    (A0)+
  111.     BEQ.S    .2
  112.     ADDQ.L    #1,D3
  113.     BRA.S    .3
  114.  
  115. .2    MOVE.L    OUTPUTBAS(PC),D1
  116.     MOVE.L    DOSBAS(PC),A6
  117.     JSR    _LVOWRITE(A6)
  118.  
  119.     LEA.L    LOCK1NAM(PC),A1
  120.     MOVE.L    A1,D1
  121.     MOVE.L    #MODE_READWRITE,D2
  122.     MOVE.L    DOSBAS(PC),A6
  123.     JSR    _LVOLOCK(A6)
  124.     TST.L    D0
  125.     BEQ.W    ERRNOTEXIST
  126.     MOVE.L    D0,PARAM1LOCK(A5)
  127.     MOVE.L    PARAM1LOCK(PC),D1
  128.     MOVE.L    #PARAM1INFO,D2
  129.     MOVE.L    DOSBAS(PC),A6
  130.     JSR    _LVOEXAMINE(A6)
  131.     TST.L    D0
  132.     BEQ.W    ERRNOTEXIST
  133.     LEA.L    PARAM1INFO,A0
  134.     CMP.L    #-3,FIB_DIRENTRYTYPE(A0)
  135.     BNE.W    ERRNOFILE
  136.  
  137.     LEA.L    LOCK2NAM(PC),A1
  138.     MOVE.L    A1,D1
  139.     MOVE.L    #MODE_READWRITE,D2
  140.     MOVE.L    DOSBAS(PC),A6
  141.     JSR    _LVOLOCK(A6)
  142.     TST.L    D0
  143.     BEQ.W    ERRNOTEXIST
  144.     MOVE.L    D0,PARAM2LOCK(A5)
  145.     MOVE.L    PARAM2LOCK(PC),D1
  146.     MOVE.L    #PARAM2INFO,D2
  147.     MOVE.L    DOSBAS(PC),A6
  148.     JSR    _LVOEXAMINE(A6)
  149.     TST.L    D0
  150.     BEQ.W    ERRNOTEXIST
  151.     LEA.L    PARAM2INFO,A0
  152.     CMP.L    #-3,FIB_DIRENTRYTYPE(A0)
  153.     BNE.W    ERRNOFILE
  154.  
  155.     LEA.L    PARAM1INFO,A0
  156.     MOVE.L    FIB_SIZE(A0),D0
  157.     LEA.L    PARAM2INFO,A0
  158.     CMP.L    FIB_SIZE(A0),D0
  159.     BNE.W    ERROTHERLEN
  160.  
  161.     MOVE.L    D0,LENGTH(A5)
  162.     ADD.L    #$7,D0
  163.     AND.L    #$FFFF8,D0
  164.     MOVE.L    D0,A2
  165.     MOVE.L    #MEMF_CLEAR,D1
  166.     MOVE.L    (_SYSBASE).W,A6
  167.     JSR    _LVOALLOCMEM(A6)
  168.     TST.L    D0
  169.     BEQ.W    ERRNOTENMEM
  170.     MOVE.L    D0,MEM1BASE(A5)
  171.     MOVE.L    A2,D0
  172.     MOVE.L    #MEMF_CLEAR,D1
  173.     MOVE.L    (_SYSBASE).W,A6
  174.     JSR    _LVOALLOCMEM(A6)
  175.     TST.L    D0
  176.     BEQ.W    ERRNOTENMEM
  177.     MOVE.L    D0,MEM2BASE(A5)
  178.  
  179.     LEA.L    LOCK1NAM(PC),A1
  180.     MOVE.L    A1,D1
  181.     MOVE.L    #MODE_OLDFILE,D2
  182.     MOVE.L    DOSBAS(PC),A6
  183.     JSR    _LVOOPEN(A6)
  184.     TST.L    D0
  185.     BEQ.W    ERROPENFILE
  186.     MOVE.L    D0,FILHANDLE(A5)
  187.     MOVE.L    FILHANDLE(PC),D1
  188.     MOVE.L    MEM1BASE(PC),D2
  189.     LEA.L    PARAM1INFO,A0
  190.     MOVE.L    FIB_SIZE(A0),D3
  191.     MOVE.L    DOSBAS(PC),A6
  192.     JSR    _LVOREAD(A6)
  193.     TST.L    D0
  194.     BMI.W    ERRLOADFILE
  195.     BEQ.W    ERRLOADFILE
  196.     MOVE.L    FILHANDLE(PC),D1
  197.     MOVE.L    DOSBAS(PC),A6
  198.     JSR    _LVOCLOSE(A6)
  199.     CLR.L    FILHANDLE(A5)
  200.  
  201.     LEA.L    LOCK2NAM(PC),A1
  202.     MOVE.L    A1,D1
  203.     MOVE.L    #MODE_OLDFILE,D2
  204.     MOVE.L    DOSBAS(PC),A6
  205.     JSR    _LVOOPEN(A6)
  206.     TST.L    D0
  207.     BEQ.W    ERROPENFILE
  208.     MOVE.L    D0,FILHANDLE(A5)
  209.     MOVE.L    FILHANDLE(PC),D1
  210.     MOVE.L    MEM2BASE(PC),D2
  211.     LEA.L    PARAM2INFO,A0
  212.     MOVE.L    FIB_SIZE(A0),D3
  213.     MOVE.L    DOSBAS(PC),A6
  214.     JSR    _LVOREAD(A6)
  215.     TST.L    D0
  216.     BMI.W    ERRLOADFILE
  217.     BEQ.W    ERRLOADFILE
  218.     MOVE.L    FILHANDLE(PC),D1
  219.     MOVE.L    DOSBAS(PC),A6
  220.     JSR    _LVOCLOSE(A6)
  221.     CLR.L    FILHANDLE(A5)
  222.  
  223.     MOVE.L    PARAM1LOCK(PC),D1
  224.     MOVE.L    DOSBAS(PC),A6
  225.     JSR    _LVOUNLOCK(A6)
  226.     CLR.L    PARAM1LOCK(A5)
  227.     MOVE.L    PARAM2LOCK(PC),D1
  228.     MOVE.L    DOSBAS(PC),A6
  229.     JSR    _LVOUNLOCK(A6)
  230.     CLR.L    PARAM2LOCK(A5)
  231.  
  232.     MOVE.L    MEM1BASE(PC),A0        ;FILE1 ORIGINAL
  233.     MOVE.L    MEM2BASE(PC),A1
  234.     BSR.W    COMP
  235.     CMP.L    #-1,D0
  236.     BEQ.W    ERRTABTOOLONG
  237.     CMP.L    #4,D0
  238.     BEQ.W    NODIFF
  239.     MOVE.L    D0,D4
  240.  
  241.     TST.B    NOTSAVE(A5)
  242.     BNE.S    .1
  243.     LEA.L    LOCK3NAM(PC),A1
  244.     MOVE.L    A1,D1
  245.     MOVE.L    #MODE_NEWFILE,D2
  246.     MOVE.L    DOSBAS(PC),A6
  247.     JSR    _LVOOPEN(A6)
  248.     TST.L    D0
  249.     BEQ.W    ERRSAVEFILE
  250.     MOVE.L    D0,FILHANDLE(A5)
  251.     MOVE.L    FILHANDLE(PC),D1
  252.     LEA.L    COMPTAB,A0
  253.     MOVE.L    A0,D2
  254.     MOVE.L    D4,D3
  255.     MOVE.L    DOSBAS(PC),A6
  256.     JSR    _LVOWRITE(A6)
  257.     TST.L    D0
  258.     BMI.W    ERRSAVEFILE
  259.     BEQ.W    ERRSAVEFILE
  260.     MOVE.L    FILHANDLE(PC),D1
  261.     MOVE.L    DOSBAS(PC),A6
  262.     JSR    _LVOCLOSE(A6)
  263. .1    CLR.L    FILHANDLE(A5)
  264.  
  265. ALL_OK    LEA.L    NROK(PC),A0
  266.     MOVE.L    NUMBER(PC),D0
  267.     SWAP    D0
  268.     BSR.S    NEXTNUMBER
  269.     BSR.S    NEXTNUMBER
  270.     BSR.S    NEXTNUMBER
  271.     BSR.S    NEXTNUMBER
  272.     LEA.L    OKDISP(PC),A0
  273.     BRA.S    ENDE
  274.  
  275. NEXTNUMBER    CLR.W    D0
  276.     ROL.L    #4,D0
  277.     MOVE.B    .NR(PC,D0.W),D0
  278.     MOVE.B    D0,(A0)+
  279.     RTS
  280.  
  281. .NR    DC.B    '0123456789ABCDEF'
  282.     EVEN
  283.  
  284. NODIFF    LEA.L    NODIFFDISP(PC),A0
  285. ENDE    MOVEQ.L    #0,D0
  286.     BRA.S    ENDE1
  287.  
  288. ERRGENERAL    LEA.L    $0.W,A0
  289.     BRA.S    ERR
  290.  
  291. ERRSAVEFILE    LEA.L    ERRSAVEDISP(PC),A0
  292.     BRA.S    ERR
  293.  
  294. ERRNOTEXIST    LEA.L    NOTEXISTDISP(PC),A0
  295.     BRA.S    ERR
  296.  
  297. ERRNOFILE    LEA.L    NOFILEDISP(PC),A0
  298.     BRA.S    ERR
  299.  
  300. ERROTHERLEN    LEA.L    OTHERLENDISP(PC),A0
  301.     BRA.S    ERR
  302.  
  303. ERRNOTENMEM    LEA.L    NOTENMEMDISP(PC),A0
  304.     BRA.S    ERR
  305.  
  306. ERROPENFILE    LEA.L    ERROPENDISP(PC),A0
  307.     BRA.S    ERR
  308.  
  309. ERRLOADFILE    LEA.L    ERRLOADDISP(PC),A0
  310.     BRA.S    ERR
  311.  
  312. ERRTABTOOLONG    MOVE.L    MEM1BASE(PC),A0
  313.     MOVE.L    MEM2BASE(PC),A1
  314.     MOVEQ.L    #0,D0
  315.     MOVEQ.L    #0,D1
  316. .2    CMPM.B    (A0)+,(A1)+
  317.     BEQ.S    .1
  318.     ADDQ.L    #1,D1
  319. .1    ADDQ.L    #1,D0
  320.     CMP.L    LENGTH(PC),D0
  321.     BLO.S    .2
  322.     MOVE.L    D1,D0
  323.     LEA.L    NRBIG(PC),A0
  324.     BSR.S    NEXTNUMBER
  325.     BSR.S    NEXTNUMBER
  326.     BSR.S    NEXTNUMBER
  327.     BSR.S    NEXTNUMBER
  328.     MOVE.L    D1,D0
  329.     SWAP    D0
  330.     BSR.W    NEXTNUMBER
  331.     BSR.W    NEXTNUMBER
  332.     BSR.W    NEXTNUMBER
  333.     BSR.W    NEXTNUMBER
  334.     LEA.L    NOTSAVEDISP(PC),A0
  335. ERR    MOVE.L    OSSTACK(PC),A7
  336.     MOVEQ.L    #20,D0
  337.  
  338. ENDE1
  339.     MOVE.L    D0,-(A7)
  340.     CMP.L    #0,A0
  341.     BEQ.S    .1
  342.     MOVEQ.L    #0,D3
  343.     MOVE.L    A0,D2
  344. .3    TST.B    (A0)+
  345.     BEQ.S    .2
  346.     ADDQ.L    #1,D3
  347.     BRA.S    .3
  348.  
  349. .2    MOVE.L    OUTPUTBAS(PC),D1
  350.     MOVE.L    DOSBAS(PC),A6
  351.     JSR    _LVOWRITE(A6)
  352.  
  353. .1    TST.L    FILHANDLE(A5)
  354.     BEQ.S    .9
  355.     MOVE.L    FILHANDLE(PC),D1
  356.     MOVE.L    DOSBAS(PC),A6
  357.     JSR    _LVOCLOSE(A6)
  358.  
  359. .9    TST.L    PARAM1LOCK(A5)
  360.     BEQ.S    .5
  361.     MOVE.L    PARAM1LOCK(PC),D1
  362.     MOVE.L    DOSBAS(PC),A6
  363.     JSR    _LVOUNLOCK(A6)
  364.  
  365. .5    TST.L    PARAM2LOCK(A5)
  366.     BEQ.S    .4
  367.     MOVE.L    PARAM2LOCK(PC),D1
  368.     MOVE.L    DOSBAS(PC),A6
  369.     JSR    _LVOUNLOCK(A6)
  370.  
  371. .4    MOVE.L    LENGTH(PC),D0
  372.     ADD.L    #$7,D0
  373.     AND.L    #$FFFF8,D0
  374.     MOVE.L    D0,A2
  375.     TST.L    MEM1BASE(A5)
  376.     BEQ.S    .8
  377.     MOVE.L    MEM1BASE(PC),A1
  378.     MOVE.L    (_SYSBASE).W,A6
  379.     JSR    _LVOFREEMEM(A6)
  380. .8    TST.L    MEM2BASE(A5)
  381.     BEQ.S    .7
  382.     MOVE.L    A2,D0
  383.     MOVE.L    MEM2BASE(PC),A1
  384.     MOVE.L    (_SYSBASE).W,A6
  385.     JSR    _LVOFREEMEM(A6)
  386.  
  387. .7    TST.L    DOSBAS(A5)
  388.     BEQ.S    .6
  389.     MOVE.L    (_SYSBASE).W,A6
  390.     MOVE.L    DOSBAS(PC),A1
  391.     JSR    _LVOCLOSELIBRARY(A6)    ;DOS-Lib schliessen
  392.  
  393. .6    MOVE.L    (A7)+,D0
  394.     RTS
  395.  
  396. ;----------------------------------------------------------------------------
  397. EXAMPARAM    MOVEQ.L    #0,D3
  398.     SUBQ.L    #1,A0
  399. .4    ADDQ.L    #1,A0
  400.     CMP.B    #$9,(A0)
  401.     BEQ.S    .4
  402.     CMP.B    #$20,(A0)
  403.     BEQ.S    .4
  404.     CMP.B    #$A,(A0)
  405.     BEQ.S    .3
  406.     MOVEQ.L    #0,D2
  407.     CMP.B    #'"',(A0)
  408.     BNE.S    .6
  409.     ST    D2
  410.     ADDQ.L    #1,A0
  411. .6
  412. .1    MOVE.B    (A0)+,D1
  413.     CMP.B    #$9,D1
  414.     BEQ.S    .2
  415.     CMP.B    #$20,D1
  416.     BEQ.S    .2
  417.     CMP.B    #$A,D1
  418.     BEQ.S    .3
  419.     CMP.B    #'"',D1
  420.     BEQ.S    .5
  421.     MOVE.B    D1,(A1)+
  422.     ADDQ.L    #1,D3
  423.     BRA.S    .1
  424.  
  425. .2    TST.B    D2
  426.     BEQ.S    .7
  427.     MOVE.B    D1,(A1)+
  428.     ADDQ.L    #1,D3
  429.     BRA.S    .1
  430.  
  431. .5
  432. .7    MOVE.B    #$0,(A1)+
  433.     MOVEQ.L    #0,D0
  434.     RTS
  435.  
  436. .3    MOVE.B    #$0,(A1)+
  437.     MOVEQ.L    #-1,D0
  438.     RTS
  439.  
  440. *******************************************************************************
  441. ;A0: ORGPRG        ;ORIGINAL PROGRAM
  442. ;A1: MODPRG        ;MODIFIED PROGRAM
  443.  
  444. ;THE PROGRAM GIVES BACK THE LENGTH OF THE COMPARATION TABLE IN D0
  445. ;IF THE TABLE DEFINED IS NOT BIG ENOUGH, #$FFFFFFFF IS IN D0
  446. ;THE PROGRAM USES THE REGISTERS D0,D1 AND A0,A1,A2,A3
  447.  
  448.  
  449. COMP    CLR.L    NUMBER
  450.     LEA.L    COMPTAB,A2
  451.     MOVE.W    #SIZETABLE+$40-1,D0
  452. .7    CLR.L    (A2)+
  453.     DBF    D0,.7
  454.  
  455.     LEA.L    COMPTAB,A2
  456.     CLR.B    CMPCOUNT
  457.     MOVEQ.L    #0,D0
  458. .2    CMPM.B    (A0)+,(A1)+
  459.     BEQ.S    .1
  460.     ADD.L    #1,NUMBER
  461.     ADD.B    #1,CMPCOUNT
  462.     CMP.B    #1,CMPCOUNT
  463.     BNE.S    .4
  464.     OR.L    D0,(A2)+
  465.     MOVE.L    A2,A3        ;A3 POINTS AT THE LOCATION WHERE LATER THE
  466.                 ;LENGTH OF THE ACTUAL STRING IS
  467. .4    CMP.B    #2,CMPCOUNT
  468.     BNE.S    .6
  469.     OR.B    #$80,-3(A3)
  470.     MOVE.B    -1(A2),(A2)+
  471. .6    MOVE.B    -1(A1),(A2)+    ;WITH FILES, GET THE BYTE FROM THE MODIFIED ONE
  472.  
  473.     CMP.B    #$FF,CMPCOUNT    ;ONLY 1 BYTE RESERVED FOR COUNTER
  474.     BNE.S    .3
  475.     MOVE.B    CMPCOUNT(PC),(A3)    ;LENGTH OF STRING
  476.     CLR.B    CMPCOUNT    ;CLEAR COUNTER
  477.     MOVE.L    A2,D1        ;LET A2 UNCHANGED ON EVEN VALUE
  478.     AND.L    #$FFFFFFFE,D1    ;SUBTRACT ONE IF A2 IS ODD
  479.     MOVE.L    D1,A2
  480.     BRA.S    .3
  481.  
  482. .1    TST.B    CMPCOUNT
  483.     BEQ.S    .3
  484.     CMP.B    #1,CMPCOUNT
  485.     BEQ.S    .5
  486.     MOVE.B    CMPCOUNT(PC),(A3)    ;LENGTH OF STRING IF STRING IS NEED
  487. .5    MOVE.L    A2,D1        ;LET A2 UNCHANGED ON EVEN VALUE
  488.     AND.L    #$FFFFFFFE,D1    ;SUBTRACT ONE IF A2 IS ODD
  489.     MOVE.L    D1,A2
  490.     CLR.B    CMPCOUNT    ;CLEAR COUNTER
  491. .3    CMP.L    #COMPTABEND-8,A2
  492.     BHI    ERRCOMP
  493.     ADDQ.L    #1,D0
  494.     CMP.L    LENGTH(PC),D0
  495.     BNE.W    .2
  496.     TST.B    CMPCOUNT
  497.     BEQ.S    .8
  498.     CMP.B    #1,CMPCOUNT
  499.     BEQ.S    .9
  500.     MOVE.B    CMPCOUNT(PC),(A3)    ;LENGTH OF STRING IF STRING IS NEED
  501. .9    MOVE.L    A2,D1        ;LET A2 UNCHANGED ON EVEN VALUE
  502.     AND.L    #$FFFFFFFE,D1    ;SUBTRACT ONE IF A2 IS ODD
  503.     MOVE.L    D1,A2
  504.     CLR.B    CMPCOUNT    ;CLEAR COUNTER
  505. .8    OR.L    #$400000,(A2)+
  506.     MOVE.L    A2,D0
  507.     SUB.L    #COMPTAB,D0
  508.     RTS
  509.  
  510. ERRCOMP    MOVE.L    #-$1,D0
  511.     RTS
  512.  
  513. CMPCOUNT    DC.B    0
  514.     EVEN
  515. ;LENGTH    DC.L    $15C04        ;LENGTH OF FILE TO COMPARE
  516. ; DATAFORMAT OF COMPTAB
  517. ; FIRST ENTRY: $00 (UNUSED)
  518. ; NEXT: 3 BYTES ADDRESSOFFSET
  519. ; THIS HAS THE REASON, THAT A LONGWORD MUST BE AT AN EVEN MEMORYADDRESS
  520. ; ADDRESSOFFSET OF BYTE(S) TO BE CHANGED, IF BIT $17 IS CLEAR -> ONLY THE 
  521.                         ;FOLLOWING BYTE IS TO MODIFY
  522.                         ;AT THIS OFFSET
  523. ;                OTHERWISE THE LENGTH OF A STRING FOLLOWS,
  524.                         ;THEN THE STRING ITSELF
  525. ;                      IF BIT $16 IS SET -> END OF MODIFYING
  526.                         ;MEANS A VALUE OF $XX400000
  527. ;                  COMBINATION OF BITS $16 AND $17 IS UNUSED
  528. ;                      BIT $15 IS RESERVED FOR FUTURE
  529. ; AT THE ADRESSOFFSET YOU MUST MASK OUT THE BITS $15-$1F (AND.L #$1FFFFF)
  530. ; THE NEXT BYTE IS THE BYTE TO BE MODIFIED 
  531. ; OR THE NEXT BYTES ARE THE LENGTH OF A STRING + THE STRING ITSELF 
  532. ; + $00 IF THE STRING HAS AN ODD LENGTH
  533. ; THE MAXIMUM LENGTH OF A FILE IS SO $1FFFFF, I THINK THIS SHOULD BE ENOUGH
  534.  
  535.  
  536. ;EXAMPLE
  537.  
  538. ;COMPTAB
  539. ;    DC.B   $00,$00,$10,$00 ;MEANS OFFSET $1000 TO FILEBEGIN, 1 BYTE FOLLOWS
  540. ;    DC.B   $FC,$80,$FD,$32 ;THE BYTE TO CHANGE AT THE OFFSET $1000 IS $FC
  541. ;                   ;THE NEXT OFFSET IS $FD32, A STRING FOLLOWS
  542. ;    DC.B   $05,$31,$32,$33,$34,$35 ;LENGTH OF STRING IS $5
  543. ;                              ;THE STRING IS $31,$32,$33,$34,$35
  544. ;    DC.B   $00,$01,$12,$34 ;UNUSED BYTE DUE TO ODD STRINGLENGTH
  545. ;                   ;THE NEXT OFFSET IS $11234
  546. ;    DC.B   $45,$40,$00,$00 ;THE BYTE TO CHANGE AT THE OFFSET $11234 IS $45
  547. ;                   ;ONLY BIT $16 IS SET -> COMPARE ENDS
  548.  
  549. ************************************************************************
  550.  
  551. WRITTEN    DC.B    'Compares files and makes a table of differences.',$A
  552.     DC.B    'Written by Egon.',$A,$A
  553. WRITTENEND    DC.B    0
  554.     EVEN
  555.  
  556. HELPSYNTAX    
  557.     DC.B    'Syntax: MAKECOMPTAB Originalfile Patchedfile {Tablefile}',$A
  558.     DC.B    'If Tablefile is not specified, the comparationtable gained will',$A
  559.     DC.B    'not be saved. You may set the parameters in double quotation marks.',$A
  560.     DC.B    'MAKECOMPTAB belongs to THE PATCHER by Egon.',$A,0
  561.     EVEN
  562.  
  563. LOCK1NAM    DS.B    $200
  564.     EVEN
  565.  
  566. LOCK2NAM    DS.B    $200
  567.     EVEN
  568.  
  569. LOCK3NAM    DS.B    $200
  570.     EVEN
  571.  
  572. OKDISP    DC.B    'Everything went ok. There were found $'
  573. NROK    DC.B    '0000 differences.',$A,0
  574.     EVEN
  575.  
  576. NOTSAVEDISP    DC.B    'There were too many differences ($'
  577. NRBIG    DC.B    '00000000) between the files.',$A
  578.     DC.B    'Comparationtable not saved.',$A,0
  579.     EVEN
  580.  
  581. NODIFFDISP    DC.B    'No differences detected.',$A,0
  582.     EVEN
  583.  
  584. ERRSAVEDISP    DC.B    'Error while saving comparationtable.',$A,0
  585.     EVEN
  586.  
  587. NOTEXISTDISP    DC.B    'Error - file does not exist.',$A,0
  588.     EVEN
  589.  
  590. NOFILEDISP    DC.B    'Error - parameter is not a file.',$A,0
  591.     EVEN
  592.  
  593. OTHERLENDISP    DC.B    'Error - the files to compare must have the same'
  594.     DC.B    ' length.',$A,0
  595.     EVEN
  596.  
  597. NOTENMEMDISP    DC.B    'Error - Out of memory.',$A,0
  598.     EVEN
  599.  
  600. ERROPENDISP    DC.B    'Error while opening file.',$A,0
  601.     EVEN
  602.  
  603. ERRLOADDISP    DC.B    'Error while loading.',$A,0
  604.     EVEN
  605.  
  606. DOSBAS    DC.L    0
  607. OUTPUTBAS    DC.L    0
  608.  
  609. FILHANDLE    DC.L    0
  610. OSSTACK        DC.L    0
  611. INTUINAME    DC.B    "intuition.library",0
  612.     EVEN
  613. GRANAME    DC.B    "graphics.library",0
  614.     EVEN
  615. DOSNAM    DC.B    'dos.library',0
  616.     EVEN
  617. DATABASE    DC.L    0
  618. DATALENGTH    DC.L    0
  619. PARAM1LOCK    DC.L    0
  620. PARAM2LOCK    DC.L    0
  621. MEM1BASE    DC.L    0
  622. MEM2BASE    DC.L    0
  623. LENGTH    DC.L    0
  624. NUMBER    DC.L    0
  625. NOTSAVE    DC.B    0
  626.     EVEN
  627.  
  628. ;--------------------------------------------------------------------------
  629.  
  630.     SECTION    PRG2,BSS
  631. PARAM1INFO    DS.B    $104
  632. PARAM2INFO    DS.B    $104
  633. COMPTAB    DS.L    SIZETABLE
  634. COMPTABEND
  635.     DS.L    $40        ;IMPORTANT SPACE
  636.  
  637.